package com.yugao.fintech.antelope.base.config;

import com.yugao.fintech.antelope.base.model.constants.CommonCons;
import com.yugao.fintech.antelope.base.model.constants.SecurityCons;
import com.yugao.fintech.framework.assistant.utils.StringUtils;
import com.yugao.fintech.framework.assistant.crypto.AesCrypto;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;

import javax.annotation.PostConstruct;

/**
 * 读取项目相关的系统配置配置
 */
@Getter
@Setter
@ToString
@ConfigurationProperties(prefix = CommonCons.PROPERTIES_PREFIX + "global")
public class GlobalProperties {
    /**
     * 项目名称
     */
    private String name;

    /**
     * 版本
     */
    private String version;

    /**
     * 版权年份
     */
    private String copyrightYear;

    /**
     * 上传路径
     */
    private static String profile;

    /**
     * 获取用户访问地址开关
     */
    private static boolean addressEnabled;

    /**
     * 是否启用安全模式
     */
    private Boolean safeMode = false;

    /**
     * 密钥key, 用于系统使用对称加密算法加密敏感数据, 建议刚开始就设置复杂一些, 一旦设置项目运行期间是暂时不支持修改的,
     * 否则会导致部分数据无法展示
     */
    private String secretKey;

    /**
     * jwt token生成时使用的密钥
     */
    private String jwtSecret = SecurityCons.SECRET;

    /**
     * 后端服务接口地址
     */
    private String serverAddr = "http://127.0.0.1:38081";

    @PostConstruct
    public void init() {
        if (StringUtils.isEmpty(secretKey)) {
            return;
        }
        AesCrypto.checkSecretKey(this.secretKey);
    }


    public static String getProfile() {
        return profile;
    }

    public void setProfile(String profile) {
        GlobalProperties.profile = profile;
    }

    public static boolean isAddressEnabled() {
        return addressEnabled;
    }

    public void setAddressEnabled(boolean addressEnabled) {
        GlobalProperties.addressEnabled = addressEnabled;
    }

    /**
     * 获取头像上传路径
     */
    public static String getAvatarPath() {
        return getProfile() + "/avatar";
    }

    /**
     * 获取下载路径
     */
    public static String getDownloadPath() {
        return getProfile() + "/download/";
    }

    /**
     * 获取上传路径
     */
    public static String getUploadPath() {
        return getProfile() + "/upload";
    }
}
